package com.jrx.anytxn.customer.service;

import com.jrx.anytxn.common.exception.TxnBizException;
import com.jrx.anytxn.common.exception.TxnException;
import com.jrx.anytxn.customer.entity.TlCouponDetail;

import java.util.Date;
import java.util.List;


public interface ITlCouponDetailService {

    /**
     * 分页查询优惠券发放明细信息
     * 
     * @param pageNum
     * @param pageSize
     * @param tenantId
     * @return
     * @throws TxnException
     */
    List<TlCouponDetail> findAllPageByTenantId(Integer pageNum, Integer pageSize, String tenantId, String chineseName,
                                               String customerId, String idNumber, String updateBy, String mobile, String beginDate, String endDate)
        throws TxnException;

    /**
     * 统计
     * @param pageNum
     * @param pageSize
     * @param tenantId
     * @param chineseName
     * @param customerId
     * @param idNumber
     * @param updateBy
     * @param mobile
     * @param beginDate
     * @param endDate
     * @return
     * @throws TxnException
     */
    int countAllPageByTenantId(Integer pageNum, Integer pageSize, String tenantId, String chineseName,
        String customerId, String idNumber, String updateBy, String mobile, String beginDate, String endDate)
        throws TxnException;

    /**
     * 写入优惠券发放明细表
     * 
     * @param tlCouponDetailList
     */
    void addCouponDetail(List<TlCouponDetail> tlCouponDetailList);

    /**
     * 根根 客户id、活动编号、权益id、租户号 查询 权益发放明细表
     * 
     * @param customerId
     *            客户id
     * @param activityId
     *            客户id
     * @param rightsId
     *            权益id
     * @param tenantId
     *            租户号
     * @return
     */
    List<TlCouponDetail> findByCustomerIdAndActivityIdAndRightsId(String customerId, String activityId, String rightsId,
        String tenantId);

    /**
     * 根据 tenantId + userId + activityId 查询权益发放明细表
     * @param userId
     * @param activityId
     * @param tenantId
     * @return
     */
    List<TlCouponDetail> findByUserIdAndActivityId(String userId, String activityId, String tenantId, String channel) throws TxnBizException;

    /**
     * 根根 客户id、活动编号、权益id、租户号、时间范围内 查询 权益发放明细表
     * @param customerId
     * @param activityId
     * @param rightsId
     * @param tenantId
     * @param beginTime
     * @param endTime
     * @return
     */
    List<TlCouponDetail> findByCustomerIdAndActivityIdAndRightsIdWithPeriod(String customerId, String activityId, String rightsId,
                                                                  String tenantId, String beginTime, String endTime);

    /**
     * 根根 客户id、活动编号、租户号、时间范围内 查询 权益发放明细表
     * @param customerId
     * @param activityId
     * @param tenantId
     * @param beginTime
     * @param endTime
     * @return
     */
    List<TlCouponDetail> findByCustomerIdAndActivityIdWithPeriod(String customerId, String activityId, String tenantId, Date beginTime, Date endTime);

    /**
     * 根根 客户id、活动编号、权益id、租户号、权益类型 查询 权益发放明细表
     * @param customerId
     * @param activityId
     * @param rightsId
     * @param tenantId
     * @param rightsType
     * @return
     */
    List<TlCouponDetail> selectByCustomerIdAndActivityIdAndRightsIdAndRightsType(String customerId, String activityId, String rightsId,
                                                            String tenantId, String rightsType);

    /**
     * 根根 客户id、创建日期、权益id、租户号 查询 权益发放明细表
     * @param customerId
     * @param rightsId
     * @param tenantId
     * @param date
     * @return
     */
    List<TlCouponDetail> listByCustomerIdAndRightsIdAndCreateDate(String customerId, String rightsId, String tenantId, Date date);

    /**
     *  新增权益发放明细记录
     * @param couponDetail
     * @return
     */
    int insert(TlCouponDetail couponDetail);

    /**
     * 批量插入
     * @param couponDetailList
     * @return
     */
    int insertBatch(List<TlCouponDetail> couponDetailList);

    /**
     * 根据租户号、手机号、活动id、被推荐人非空 查询记录
     * @param mobile
     * @param activityId
     * @param tenantId
     * @return
     */
    List<TlCouponDetail> selectByMobileAndActivityIdAndRecommendedNonNull(String mobile, String activityId,
                                                                     String tenantId);


}
